#ifndef __CESA_IOCTL_H__
#define __CESA_IOCTL_H__

#include "fh_unf_cesa.h"

typedef struct _FH_CESA_HANDLE_S
{
	/*
	 * The private data of os auxiliary sets.
	 */
	void *p_priv;

	uint32_t ades_reg;
	uint32_t ades_irq;
	struct device *dev;
} FH_CESA_HANDLE_S, *FH_CESA_HANDLE_P;




typedef struct _CMD_ADES_SESSION_S
{
	uint32_t session;
	int32_t ret;
} CMD_ADES_CREATE_S, CMD_ADES_DESTROY_S, CMD_ADES_PROCESS_STOP_S;

typedef struct _CMD_ADES_CTRL_S
{
	uint32_t session;
	FH_CESA_ADES_CTRL_S ctrl;
	int32_t ret;
} CMD_ADES_CTRL_S, CMD_ADES_INFO_S;

typedef struct _CMD_ADES_PROCESS_S
{
	uint32_t session;
	uint32_t p_src_addr;
	uint32_t p_dst_addr;
	uint32_t length;
	int32_t ret;
} CMD_ADES_PROCESS_S, CMD_ADES_PROCESS_START_S;

typedef struct _CMD_ADES_EFUSE_KEY_S {
	uint32_t session;
	FH_CESA_ADES_EFUSE_PARA_S efuse_para;
	int32_t ret;
} CMD_ADES_EFUSE_KEY_S;

typedef struct _CMD_ADES_ADDR_ATTR_S {
	uint32_t session;
	FH_CESA_ADES_ADDR_ATTR_E src_addr_attr;
	FH_CESA_ADES_ADDR_ATTR_E dst_addr_attr;
	int32_t ret;
} CMD_ADES_ADDR_ATTR_S;




typedef struct _CMD_SHA_SESSION_S
{
  uint32_t session;
  int32_t ret;
} CMD_SHA_CREATE_S, CMD_SHA_DESTROY_S, CMD_SHA_UPDATE_STOP_S;

typedef struct _CMD_SHA_INIT_S
{
  uint32_t session;
  FH_CESA_SHA_CTRL_S ctrl;
  int32_t ret;
} CMD_SHA_INIT_S;

typedef struct _CMD_SHA_UPDATE_S
{
  uint32_t session;
  uint8_t *p_msg;
  uint32_t length;
  int32_t ret;
} CMD_SHA_UPDATE_S, CMD_SHA_UPDATE_START_S;

typedef struct _CMD_SHA_FINAL_S
{
  uint32_t session;
  uint8_t p_dgst[32];
  int32_t ret;
} CMD_SHA_FINAL_S;

typedef struct _CMD_SHA_UPDATE_POLLING_S
{
  uint32_t session;
  uint32_t timeout;
  int32_t ret;
} CMD_SHA_UPDATE_POLLING_S;




typedef struct _CMD_RSA_SESSION_S
{
  uint32_t session;
  int32_t ret;
} CMD_RSA_CREATE_S, CMD_RSA_DESTROY_S;

typedef struct _CMD_RSA_PROCESS_S
{
  uint32_t session;

  uint32_t mod_length;
  uint32_t exp_length;
  uint32_t src_length;
  
  uint8_t m[256];
  uint8_t e[256];
  
  uint8_t src_addr[256];
  uint8_t dst_addr[256];

  int32_t ret;
} CMD_RSA_PROCESS_S;









#define FH_ID_CESA             0xC4

#define CESA_IOC_ADES_CREATE				_IOWR(FH_ID_CESA, 0x0, CMD_ADES_CREATE_S)
#define CESA_IOC_ADES_DESTROY				_IOWR(FH_ID_CESA, 0x1, CMD_ADES_DESTROY_S)
#define CESA_IOC_ADES_CONFIG				_IOWR(FH_ID_CESA, 0x2, CMD_ADES_CTRL_S)
#define CESA_IOC_ADES_PROCESS				_IOWR(FH_ID_CESA, 0x3, CMD_ADES_PROCESS_S)
#define CESA_IOC_ADES_ENCRYPT				_IOWR(FH_ID_CESA, 0x4, CMD_ADES_PROCESS_S)
#define CESA_IOC_ADES_DECRYPT				_IOWR(FH_ID_CESA, 0x5, CMD_ADES_PROCESS_S)
#define CESA_IOC_ADES_GET_INFO				_IOWR(FH_ID_CESA, 0x6, CMD_ADES_INFO_S)
#define CESA_IOC_ADES_EFUSE_KEY				_IOWR(FH_ID_CESA, 0x7, CMD_ADES_EFUSE_KEY_S)
#define CESA_IOC_ADES_ADDR_ATTR				_IOWR(FH_ID_CESA, 0x8, CMD_ADES_ADDR_ATTR_S)

#define CESA_IOC_SHA_CREATE					_IOWR(FH_ID_CESA, 0x20, CMD_SHA_CREATE_S)
#define CESA_IOC_SHA_DESTROY				_IOWR(FH_ID_CESA, 0x21, CMD_SHA_DESTROY_S)
#define CESA_IOC_SHA_INIT					_IOWR(FH_ID_CESA, 0x22, CMD_SHA_INIT_S)
#define CESA_IOC_SHA_UPDATE					_IOWR(FH_ID_CESA, 0x23, CMD_SHA_UPDATE_S)
#define CESA_IOC_SHA_FINAL					_IOWR(FH_ID_CESA, 0x24, CMD_SHA_FINAL_S)
#define CESA_IOC_SHA_UPDATE_START			_IOWR(FH_ID_CESA, 0x25, CMD_SHA_UPDATE_START_S)
#define CESA_IOC_SHA_UPDATE_POLLING			_IOWR(FH_ID_CESA, 0x26, CMD_SHA_UPDATE_POLLING_S)
#define CESA_IOC_SHA_UPDATE_STOP			_IOWR(FH_ID_CESA, 0x27, CMD_SHA_UPDATE_STOP_S)

#define CESA_IOC_RSA_CREATE					_IOWR(FH_ID_CESA, 0x30, CMD_RSA_CREATE_S)
#define CESA_IOC_RSA_DESTROY				_IOWR(FH_ID_CESA, 0x31, CMD_RSA_DESTROY_S)
#define CESA_IOC_RSA_PROCESS				_IOWR(FH_ID_CESA, 0x32, CMD_RSA_PROCESS_S)

#endif	/* __CESA_IOCTL_H__ */

